home *** CD-ROM | disk | FTP | other *** search
- #include "assist2.h"
- #include "include.h"
- #include "gemdefs.h"
- #include "gembind.h"
-
- #define FILENAME "ASSIST2.RSC"
- #define ACCNAME " The Assistant "
-
-
- /****************************************************************/
- /*** If you have a battery backup of your systemclock ***/
- /*** please tell the compiler witch timer keeps on running ***/
- /*** >>> System clock (GEM) ***/
- /*** >>> Keyboard processor clock (KEY) ***/
- /****************************************************************/
-
- #define GEM 0
-
- /****************************************************************/
- /*** In Europa there is another date-format then ***/
- /*** there is in the USA ***/
- /*** define the date-format here ***/
- /*** >>> 31-12-87 (EUR) ***/
- /*** >>> 12-31-87 (USA) ***/
- /****************************************************************/
-
- #define EUR 0
-
- /****************************************************************/
- /*** Decaration of the variables ***/
- /****************************************************************/
-
- OBJECT *tree;
- int contrl[12],intin[128],intout[128],ptsin[128],ptsout[128];
- int in[11],out[57];
- extern int gl_apid;
- short btime=TRUE,bdate=FALSE,balarm=FALSE;
- char td_string[18] = "00.00.00 00:00:00";
- char *time_string="000000",*date_string="000000";
- char wait[] = { 0xff, 20 ,0xff, 0 };
- int first,vn,zh,button,wh;
- int bx,by,bw,bh,xdesk,ydesk,wdesk,hdesk;
-
-
- int info_track;
- int info_sector;
- int info_side;
- long info_free;
- char info_name[14];
-
-
-
- main()
- {
- register long time; /*** use register for speed ***/
- register char temp;
- int event,h;
-
- int eind;
- char bfree[7];
- OBJECT *tree;
- appl_init();
- first=TRUE;
- /********************************************/
- /*** Copy the time and date ***/
- /*** From GEM (system) to BIOS (keyboard) ***/
- /*** or ***/
- /*** From BIOS (keyboard) to GEM (system) ***/
- /********************************************/
- /*
- #ifdef GEM
- tel_bios(Tgetdate(),Tgettime());
- #else
- tel_gem(Gettime());
- #endif
-
- */
- if(!rsrc_load(FILENAME)) /*** try to load the RSC-file ***/
- {
- form_alert(1,"[3][I'm sorry, but I can't find|the RESOURCE-file.][ #&%$*##&^ ]");
- appl_exit();
- }
- else
- {
- vn = graf_handle(&h,&zh,&h,&h); zh -= 2;
- v_opnvwk(&h,&vn,out);
- vst_color(vn,1);
- wind_get(0,WF_WXYWH,&xdesk,&ydesk,&wdesk,&hdesk);
- /*** Put program-name into the desktop ***/
-
- menu_register(gl_apid,ACCNAME);
- rsrc_gaddr(0,CLOCK,&tree);
- set_text(tree,TIME,time_string);
- set_text(tree,DATE,date_string);
- while(TRUE) /*** means always ***/
- {
- time = Gettime(); /*** get the time and date ***/
- /*** from the keyboard ***/
-
- /*get the second's*/
- temp = ((((char)time) & 0x1f)*2);
- convert_time(temp,15,4);
-
- /*get the minutes*/
- time >>= 5;
- temp = ((char)time) & 0x3f;
- convert_time(temp,12,2);
-
- /*get the hours*/
- time >>=6;
- temp = time & 0x1f;
- convert_time(temp,9,0);
-
- /*get the day*/
- time >>=5;
- temp = ((char)time) & 0x1f;
- #ifdef EUR
- convert_date(temp,0,0); /*Europe format*/
- #else
- convert_date(temp,3,2); /*USA format*/
- #endif
-
- /*get the month*/
- time >>=5;
- temp = ((char)time) & 0x0f;
- #ifdef EUR
- convert_date(temp,3,2);
- #else
- convert_date(temp,0,0);
- #endif
-
- /*get the year*/
- temp = ((char)((time >> 4) + 80L) % 100) & 0x7f;
- convert_date(temp,6,4);
-
- rsrc_gaddr(0,CLOCK,&tree);
-
- /********************************************/
- /*** if alarm is set then ***/
- /*** check if the timestring is the same ***/
- /*** as the alarmstring. ***/
- /********************************************/
-
- if (balarm==TRUE && (strncmp(( (TEDINFO *) (tree + ALARM)->ob_spec )->te_ptext,time_string,4))==0)
- {
- balarm=FALSE; /*** set alarm off ***/
- setp(tree,ALARMON,NORMAL);
- setp(tree,ALARMOFF,SELECTED);
- ping(); /*** give some sound ***/
- do_dialog(ALERT1,0); /*** tel the user it's time ***/
- }
- if (btime == TRUE && bdate == TRUE)
- {
- /*** display the ***/
- /*** whole timestring ***/
-
- v_gtext(vn,502,zh,td_string);
- }
- else
- {
- if (btime == TRUE && bdate == FALSE)
- {
- /*** display only ***/
- /*** the date ***/
-
- v_gtext(vn,574,zh,&td_string[9]);
- }
- else
- {
- if (btime == FALSE && bdate == TRUE)
- {
- /*** make an early end to ***/
- /*** the string and display ***/
- /*** the time ***/
-
- td_string[9]=0;
- v_gtext(vn,574,zh,td_string);
- }
- }
- }
- if (((date_string[5]-'0')<7)&&( first==TRUE))
- {
- ping();
- first=FALSE;
- wnd_opn();
- clock();
- wnd_cls();
- }
-
- /********************************************/
- /*** check wat's happening. ***/
- /********************************************/
-
- event = evnt_multi(MU_TIMER | MU_MESAG,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,out,2000,0,&h,&h,&h,&h,&h,&h);
- if((event & MU_MESAG) && (*out == AC_OPEN))
- {
- wnd_opn();
- rsrc_gaddr(0,MAIN,&tree);
- eind = FALSE;
- while(eind != TRUE)
- {
- ltoa(Malloc(-1L),bfree);
- set_text(tree,MBFREE,bfree);
- form_center(tree,&bx,&by,&bw,&bh);
- form_dial(0,0,0,0,0,bx,by,bw,bh);
- form_dial(1,0,0,0,0,bx,by,bw,bh);
- objc_draw(tree,0,32,bx,by,bw,bh);
- button=form_do(tree,0);
- objc_change(tree,button,0,bx,by,bw,bh,NORMAL,0);
- form_dial(3,0,0,0,0,bx,by,bw,bh); /*** erase dialog ***/
- switch(button)
- {
-
- case ABOUT:
- do_dialog(INTRO,0);
- break;
-
- case MCLOCK:
- clock();
- break;
-
- case MFORMAT:
- format();
- break;
-
- case MAKEDIR:
- makedir();
- break;
-
- case MINFOA:
- case MINFOB:
- disk_info(button-MINFOA);
- break;
-
- case MERASEA:
- case MERASEB:
- disk_erase(button-MERASEA);
- break;
-
- case MCANCEL:
- eind=TRUE;
- break;
- } /* end of switch */
- } /* end of while */
- wnd_cls();
- }
- }
- appl_exit();
- }
- }
-
-
-
- disk_erase(drive)
- int drive;
- {
- if (insert(drive)==OKINSERT)
- {
- if (get_info(drive)==TRUE)
- {
- make_boot(info_track,info_sector,info_side-1,drive,"ASSIST2 FMT");
- disk_info(drive);
- }
- }
- }
-
-
-
- disk_info(drive)
- int drive;
- {
- OBJECT *tree;
- int again=TRUE;
- char *track="00",*sector="00",*side="0",*free="000000";
-
- rsrc_gaddr(0,DISKINFO,&tree);
- while (again == TRUE)
- {
- Fsfirst("$%&&&&.&^&",255);
- again=FALSE;
- info_name[0]=0;
- if (get_info(drive)==TRUE)
- {
- ltoa((long)info_track,track);
- ltoa((long)info_sector,sector);
- ltoa((long)info_side,side);
- ltoa((long)info_free,free);
- set_text(tree,INFOTRAC,track);
- set_text(tree,INFOSECT,sector);
- set_text(tree,INFOSIDE,side);
- set_text(tree,INFOFREE,free);
- set_text(tree,INFONAME,info_name);
- do_dialog(DISKINFO,0);
- if (button == INFOAGAI) again=TRUE;
- }
- }
- }
-
-
-
- get_info(drive)
- int drive;
- {
- int dummy,error,old_drive;
- char *buffer;
- long buf[4];
- DTABUF *dtabuf;
- buffer = malloc(20000);
- dtabuf = (DTABUF *) Fgetdta();
- old_drive=Dgetdrv();
- Dsetdrv(drive);
- dummy=Floprd(buffer,0L,drive,1,0,0,1);
- if(dummy < 0)
- {
- do_dialog(DISKERRO,0);
- error=FALSE;
- }
- else
- {
- if (Fsfirst("*.*",8)==0)
- {
- for(dummy=0; dummy<14; dummy++) info_name[dummy]=dtabuf->name[dummy];
- info_name[dummy++]=0;
- }
- Dfree(&buf,drive+1);
- info_free=buf[0]*buf[2]*buf[3];
- info_side=get_no(0x1a,buffer);
- info_track=get_no(0x13,buffer)/(get_no(0x18,buffer) * get_no(0x1a,buffer));
- info_sector=get_no(0x18,buffer);
- error=TRUE;
- }
- free(buffer);
- Dsetdrv(old_drive);
- return(error);
- }
-
-
-
-
- /****************************************************************/
- /*** convert the integer time ***/
- /*** to ASCII and put that into ***/
- /*** two strings. ***/
- /****************************************************************/
- convert_time(time,n1,n2)
- register char time;
- int n1,n2;
- {
- td_string[n1] = time_string[n2] = time /10 +'0';
- td_string[n1+1] = time_string[n2+1] = time %10 +'0';
- }
-
-
- /****************************************************************/
- /*** convert the integer date ***/
- /*** to ASCII and put that into ***/
- /*** two strings. ***/
- /****************************************************************/
- convert_date(date,n1,n2)
- register char date;
- int n1,n2;
- {
- td_string[n1] = date_string[n2] = date / 10 + '0';
- td_string[n1+1] = date_string[n2+1] = date % 10 + '0';
- }
-
-
- /****************************************************************/
- /*** function to let the user set the date, ***/
- /*** time and alarm and how to display it. ***/
- /****************************************************************/
- clock()
- {
- char date2[6],time2[6];
- int time=0,date=0;
-
- /*** copy the date and time ***/
- /*** currently in the dialogbox ***/
- strcpy(date2,date_string);
- strcpy(time2,time_string);
- /*** ask for user respond ***/
- do_dialog(CLOCK,TIME);
- /*** set some controle var.'s ***/
- btime=selectp(tree,TIMEON);
- bdate=selectp(tree,DATEON);
- balarm=selectp(tree,ALARMON);
- /*** if exit is SETTIME ***/
- /*** set the time and date ***/
- if (button == SETTIME)
- {
- time |= convert(time_string,0);
- time <<=6;
- time |= convert(time_string,2);
- time <<=5;
- time |= (convert(time_string,4)/2);
- Tsettime(time);
- date |= (convert(date_string,4)-80);
- date <<=4;
- #ifdef EUR
- date |= convert(date_string,2);
- date <<=5;
- date |= convert(date_string,0);
- #else
- date |= convert(date_string,0);
- date <<=5;
- date |= convert(date_string,2);
- #endif
- Tsetdate(date);
- tel_bios(Tgetdate(),Tgettime());
- }
- v_gtext(vn,502,zh," "); /***clear the desktop***/
- }
-
-
-
- /****************************************************************/
- /*** function to convert a 2byte-string into an integer ***/
- /****************************************************************/
- convert(string,number)
- char *string;
- int number;
- {
- return((string[number]-'0')*10 +(string[number+1]-'0'));
- }
-
-
-
-
- /****************************************************************/
- /*** function to give some sound ***/
- /****************************************************************/
- ping()
- {
- Cconout(7);
- while(Dosound(-1L));
- Dosound(wait);
- while(Dosound(-1L));
- Cconout(7);
- }
-
-
- /****************************************************************/
- /***function to get the time from GEM and send it to the bios ***/
- /****************************************************************/
- tel_bios(timedate)
- long timedate;
- {
- Settime(timedate);
- }
-
-
- /****************************************************************/
- /*** reverse of the above ***/
- /****************************************************************/
- tel_gem(date,time)
- int date,time;
- {
- Tsetdate(date);
- Tsettime(time);
- }
-
-
-
- /****************************************************************/
- /*** function to set the state of an object ***/
- /*** to NORMAL,SELECTED,...... ***/
- /****************************************************************/
-
- setp(tree,object,bit)
- OBJECT *tree;
- int object,bit;
- {
- objc_change(tree,object,0,bx,by,bw,bh,bit,0);
- }
-
-
-
- do_format(tr,se,si,dr,diskn)
- int tr,se,si,dr;
- char *diskn;
- {
- OBJECT *tree;
- int dt,button;
- char trs[2],sis[2],*buffer;
- sis[0]= '0';
- buffer = malloc(20000);
- rsrc_gaddr(0,GO,&tree);
- /*** set walking-bar to start ***/
- init_prog();
- /*** let some RSC-strings point ***/
- /*** to our own strings ***/
- set_text(tree,GOTRACK,trs);
- set_text(tree,GOSIDE,sis);
- /*** display a dialog box ***/
- form_center(tree,&bx,&by,&bw,&bh); /*** get coordinates ***/
- form_dial(0,0,0,0,0,bx,by,bw,bh ); /*** reserve screen ***/
- form_dial(1,0,0,0,0,bx,by,bw,bh); /*** make growbox ***/
- objc_draw(tree,0,MAX_DEPTH,bx,by,bw,bh);
- for(dt=0;dt<tr;dt++)
- {
- /*** let the user see ***/
- /*** what's going on ***/
- set_prog((float)dt,(float)tr-1,bx,by,bw,bh);
- ltoa((long)dt,trs);
- objc_draw(tree,GOTRACK,0,bx,by,bw,bh);
- objc_draw(tree,GOSIDE,0,bx,by,bw,bh);
- /*** and format side one ***/
- button = Flopfmt(buffer,0L,dr,se,dt,0,01,0x87654321L,0xe5e5);
- /*** if asked for. ***/
- /*** format side two ***/
- if((si == 1) && (button == 0))
- {
- sis[0] +=1;
- objc_draw(tree,GOSIDE,0,bx,by,bw,bh);
- sis[0] -=1;
- button = Flopfmt(buffer,0L,dr,se,dt,1,01,0x87654321L,0xe5e5);
- }
- /*** if something goes wrong ***/
- /*** button is true ***/
- if(button != 0) dt = (tr+1);
- }
- form_dial(3,0,0,0,0,bx,by,bw,bh); /*** erase dialog ***/
- free(buffer);
- if (button == FALSE) make_boot(tr,se,si,dr,diskn);
- else do_dialog(DISKERRO,0);
- }
-
-
-
-
-
- format()
- {
-
- OBJECT *tree;
- int sectors,tracks=80,sides,drive,eind;
- char *diskname="EXTENDEDFMT",*track="80";
-
- rsrc_gaddr(0,EXFORMAT,&tree);
- set_text(tree,DISKNAME,diskname);
- set_text(tree,TRACKNUM,track);
- form_center(tree,&bx,&by,&bw,&bh);
- form_dial(0,0,0,0,0,bx,by,bw,bh);
- form_dial(1,0,0,0,0,bx,by,bw,bh);
- objc_draw(tree,0,32,bx,by,bw,bh);
- eind = FALSE;
- while(eind != TRUE)
- {
- button=form_do(tree,DISKNAME);
- objc_change(tree,button,0,bx,by,bw,bh,NORMAL,0);
- switch(button){
-
- case FORMAT:
- sides= selectp(tree,DS);
- drive= selectp(tree,DRIVEB);
- sectors=selectp(tree,SEC10)+9;
- form_dial(3,0,0,0,0,bx,by,bw,bh); /*** erase dialog ***/
- if (insert(drive)==OKINSERT)
- {
- do_format(tracks,sectors,sides,drive,diskname);
- disk_info(drive);
- }
- eind=TRUE;
- break;
-
- case CANCEL:
- eind=TRUE;
- form_dial(3,0,0,0,0,bx,by,bw,bh); /*** erase dialog ***/
- break;
-
-
- case TRACKDWN:
- case TRACKUP:
- if ((button==TRACKUP)&(tracks<83)) tracks+=1;
- if ((button==TRACKDWN)&(tracks>80)) tracks-=1;
- ltoa((long)tracks,track);
- evnt_timer(100,0);
- objc_draw(tree,TRACKNUM,0,bx,by,bw,bh);
- break;
-
- }
- }
- }
-
-
-
- /****************************************************************/
- /*** function to set the width of the object used by the ***/
- /*** progress-indicator to zero ***/
- /****************************************************************/
- init_prog()
- {
- OBJECT *tree;
-
- rsrc_gaddr(0, GO, &tree);
- (tree + BAR)->ob_width = 0;
- }
-
-
- insert(drive)
- int drive;
- {
- char *str_drive="X";
- OBJECT *tree;
- rsrc_gaddr(0,INSERT,&tree);
- str_drive[0]=drive+'A';
- set_text(tree,AINSERT,str_drive);
- do_dialog(INSERT,0);
- return(button);
- }
-
-
- ltoa(number,string)
- long number;
- char *string;
- {
- sprintf(string,"%ld ",number);
- }
-
-
-
- /****************************************************************/
- /*** function to make an adjusted bootsector ***/
- /****************************************************************/
-
- make_boot(tr,se,si,dr,diskn)
- int tr,se,si,dr;
- char *diskn;
- {
- int total,dummy;
- char *buffer;
- buffer=malloc(20000);
- /*** Make a new bootsector and ***/
- /*** write is to disk ***/
-
- total=(tr * se);
- for(dummy=0; dummy<(se*512); *(buffer + dummy++)=0);
- Protobt(buffer,0x01000000L,(((tr>40)*2)+si),0);
- *(buffer + 0x13)=(total+(si ? total : 0)) &0xff;
- *(buffer + 0x14)=((total+(si ? total : 0)) >> 8) &0xff;
- *(buffer + 0x18)=se;
- Flopwr(buffer,0L,dr,1,0,0,se);
-
- for(dummy=0; dummy<512; buffer[dummy++]=0);
- for (dummy=0; dummy<strlen(diskn); dummy++)
- {
- diskn[dummy]=toupper(diskn[dummy]);
- }
- sprintf(buffer,diskn);
- buffer[11]=8;
- Flopwr(buffer,0L,dr,(12-se),(1-si),si,(se-4));
- free(buffer);
- }
-
-
- /****************************************************************/
- /*** function to check if an object is SELECTED ***/
- /****************************************************************/
- selectp(tree,which)
- long tree;
- int which;
- {
- return statep(tree,which,SELECTED);
- }
-
-
-
-
- /****************************************************************/
- /*** function to set the width of an object ***/
- /*** changing the width of an object and redraw that object ***/
- /*** wil give us a process-indicator ***/
- /****************************************************************/
- set_prog(value, maxc,x,y,w,h)
- float value, maxc;
- int x,y,w,h;
- {
- OBJECT *tree;
- GRECT box;
-
- rsrc_gaddr(0, GO, &tree);
- (tree + BAR)->ob_width=((((tree + BOX)->ob_width ) / maxc) * value);
- objc_draw(tree,BAR,0,x,y,w,h);
- }
-
-
-
- set_text(tree,object,string)
- OBJECT *tree;
- int object;
- char *string;
- {
- TEDINFO *obspec;
-
- obspec= (TEDINFO *) (tree +object)->ob_spec;
- obspec->te_ptext=string;
- obspec->te_txtlen=strlen(string)+1;
- }
-
-
-
-
-
- /****************************************************************/
- /*** function to get the state of an object ***/
- /*** to NORMAL,SELECTED,...... ***/
- /****************************************************************/
-
- statep(tree,which,bit)
- long tree;
- int which,bit;
- {
- return((LWGET(OB_STATE(which)) & bit) != FALSE);
- }
-
-
- /****************************************************************/
- /*** function to convert an integer in MSDOS-format ***/
- /*** to ATARI format ***/
- /****************************************************************/
- get_no(i,buffer)
- int i;
- char *buffer;
- {
- int low,high;
- low = *(buffer + i); high = *(buffer+ i+1);
- if(low < 0) high += 1;
- return(low + (256*high));
- }
-
- makedir()
- {
- OBJECT *tree;
- char *path,*name="12345678.123\0";
- int dummy;
- path = (char *)Malloc(40L);
- strcpy(name,"FILENAME.EXT\0");
- strcpy(path,"A:\\*.*\0");
- path[0]=(Dgetdrv()+'A');
- Dsetpath(path);
- fsel_input(path,name,&button);
- if (button==1)
- {
- for(dummy=strlen(path); dummy>0;dummy--)
- {
- if (path[dummy]=='\\')
- {
- path[dummy]=0;
- dummy=0;
- }
- }
- Dsetdrv(path[0]-'A');
- Dsetpath(path);
- if(Dcreate(name)) do_dialog(DISKERRO,0);
- }
- Mfree(path);
- }
-
-
-
- /****************************************************************/
- /** function to get user-respond from a already drawn dialog. **/
- /** And to set the exitbutton to NORMAL. **/
- /****************************************************************/
-
- do_dialog(dialog,edit)
- int dialog,edit;
- {
- rsrc_gaddr(0,dialog,&tree);
- form_center(tree,&bx,&by,&bw,&bh); /*** get coordinates ***/
- form_dial(0,0,0,0,0,bx,by,bw,bh ); /*** reserve screen ***/
- form_dial(1,0,0,0,0,bx,by,bw,bh); /*** make growbox ***/
- objc_draw(tree,0,MAX_DEPTH,bx,by,bw,bh);
- button = form_do(tree,edit);
- form_dial(2,0,0,0,0,bx,by,bw,bh); /*** schrink box ***/
- form_dial(3,0,0,0,0,bx,by,bw,bh); /*** erase dialog ***/
- setp(tree,button,NORMAL);
- }
-
- wnd_opn()
- {
- wh=wind_create(0,xdesk,ydesk,wdesk,hdesk);
- wind_open(wh,xdesk,ydesk,wdesk,hdesk);
- }
-
- wnd_cls()
- {
- wind_close(wh);
- wind_delete(wh);
- }
-
-